//
//  NSDate+Extend.h
//  SelectPhoto
//
//  Created by bianruifeng on 15/1/17.
//  Copyright (c) 2015年 bian. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDate (Extend)


/**
 *  @brief 获得 当前时间戳 1970年以前的秒
 */
@property (nonatomic,strong,readonly) NSString *timestamp;

/**
 *  @brief 时间成分
 */
@property (nonatomic,strong,readonly) NSDateComponents *components;


/**
 *  @brief 是否是今年
 */
@property (nonatomic,assign,readonly) BOOL isThisYear;


/**
 *  @brief 是否是今天
 */
@property (nonatomic,assign,readonly) BOOL isToday;

/**
 *  @brief 是否是昨天
 */
@property (nonatomic,assign,readonly) BOOL isYesToday;

/**
 *  @brief 返回一周的第几天(周末为第一天)
 */
@property (nonatomic,assign,readonly) NSInteger weekday;
/**
 *  @brief 该日期是该年的第几周
 */
@property (nonatomic,assign,readonly) NSInteger getWeekOfYear;


/**
 *  两个时间比较
 *
 *  @param unit     成分单元
 *  @param fromDate 起点时间
 *  @param toDate   终点时间
 *
 *  @return 时间成分对象
 */
+(NSDateComponents *)dateComponents:(NSCalendarUnit)unit fromDate:(NSDate *)fromDate toDate:(NSDate *)toDate;





/**
 *  @brief 获取年月日如;19871127.
 *
 *  @return 获取年月日返回  如:19871127.
 */
- (NSString *)getFormatYearMonthDay;

/**
 *  @brief 将时间格式化成年月日时分秒 @"yyyy-MM-dd HH:mm:ss"
 *
 *  @param date
 *
 *  @return 返回时间字符串
 */
+ (NSString *)stringFromDate:(NSDate *)date;

/**
 *  @brief 将时间格式化成自己指定的格式 如@"yyyy-MM-dd HH:mm:ss"
 *
 *  @param date
 *
 *  @return 返回时间字符串
 */
+ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)format;


/**
 *  @brief 将时间字符串格式化成nsdate类型
 *
 *  @param string 时间字符串
 *  @param format 格式化成指定的格式 如@"yyyy-MM-dd HH:mm:ss"
 *
 *  @return 返回时间格式
 */
+ (NSDate *)dateFromString:(NSString *)string withFormat:(NSString *)format;

+ (NSDate *)dateFromString:(NSString *)string;

//返回day天后的日期(若day为负数,则为|day|天前的日期)
- (NSDate *)dateAfterDay:(int)day;

- (NSDate *)dateAfterMonth:(int)month;


/**
 * @brief 根据日期判断是刚刚、几分钟前、几小时前等的代码片段  参考
 * Given the reference date and return a pretty date string to show
 *
 * @param refrence the date to refrence
 *
 * @return a pretty date string, like "just now", "1 minute ago", "2 weeks ago", etc
 */
- (NSString *)prettyDateWithReference:(NSDate *)reference;


/**
 *  @author bianruifeng, 16-11-05 16:11:05
 *
 *  @brief 获取当前系统的准确时间(+8小时)
 *
 *  @return NSDate
 */
+ (NSDate *)getCurrentDate;
/**
 *  @author bianruifeng, 16-11-05 16:11:15
 *
 *  @brief 获取当前系统时间并设置格式
 *
 *  @return DateStr
 */
+ (NSString *)getCurrentDateStr;

/**
 *  @author bianruifeng, 16-11-05 16:11:39
 *
 *  @brief 返回该月的第一天
 */
- (NSDate *)beginningOfMonth;
/**
 *  @author bianruifeng, 16/11/05 16:11:37
 *
 *  @brief 该月的最后一天
 */
- (NSDate *)endOfMonth;

/**
 *  @author bianruifeng, 16/11/05 16:11:15
 *
 *  @brief //返回当前周的周末
 */
- (NSDate *)endOfWeek;
@end


/**
 *  @author bianruifeng, 16-06-20 16:06:18
 *
 *  @brief 时间格式
 G:         公元时代，例如AD公元
 yyyy:     完整年
 y
 将年份 (0-9)显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符，请使用 %y。
 yy
 以带前导零的两位数字格式显示年份（如果适用）。
 yyy
 以四位数字格式显示年份。
 yyyy
 以四位数字格式显示年份。
 MM:     月，显示为1-12,带前置0
 MMM:     月，显示为英文月份简写,如 Jan
 MMMM:     月，显示为英文月份全称，如 Janualy
 dd:     日，2位数表示，如02
 d:         日，1-2位显示，如2，无前置0
 EEE:     简写星期几，如Sun
 EEEE:     全写星期几，如Sunday
 aa:     上下午，AM/PM
 H:         时，24小时制，0-23
 HH:     时，24小时制，带前置0
 h:         时，12小时制，无前置0
 hh:     时，12小时制，带前置0
 m:         分，1-2位
 mm:     分，2位，带前置0
 s:         秒，1-2位
 ss:     秒，2位，带前置0
 S:         毫秒
 Z：        GMT（时区）
 z
 显示不带前导零的时区偏移量（如 -8）。如果这是用户定义的数字格式中的唯一字符，请使用 %z。
 zz
 显示带前导零的时区偏移量（例如 -08）
 zzz
 显示完整的时区偏移量（例如 -08:00）
 
 
 
 */




